feat(xfp): scaffold NSLS-II XFP (17-BM), the fleet's first dose-delivery beamline (X-ray footprinting, offline mass-spec readout), reverse-engineered#395
Merged
Conversation
… dose-delivery beamline (X-ray footprinting, offline mass-spec readout), reverse-engineered Reverse-engineer NSLS-II's XFP beamline (17-BM, X-ray Footprinting of Biological Materials, a Case Western Reserve University partner beamline) from the public bluesky profile collection (NSLS2/xfp-profile-collection). XFP does synchrotron X-ray footprinting: an intense white / pink beam generates hydroxyl radicals that covalently modify a protein or nucleic acid in solution at solvent-accessible sites; the structural readout is done offline by mass spectrometry. Why XFP: it is the fleet's first DOSE-DELIVERY beamline and the most structurally distinct deployment yet. Every other beamline CORA models is a measurement beamline (condition a beam, place a sample, record a detector signal). XFP has NO scattering, area, or imaging detector at all. The experiment variable is the delivered radiolytic dose (exposure time x flux x attenuation); the run produces a footprinted SAMPLE plus a DOSE RECORD, and the structural analysis is the offline-readout seam (mass spec, downstream and off the instrument). The novelty lands on the Method, the Subject, and the seam, not on device vocabulary. What is modelled (14 devices, all real verified PVs, every value confirm, zero new families): the storage ring (loose StorageRing), the bendable white-beam front-end mirror (Mirror), the white-beam and ADC defining slits (Slit), the eight-position Al filter wheel that sets the dose rate (Filter), the personnel and timed dose shutters (Shutter), the DG535 delay generator that fires the millisecond Uniblitz fast shutter (TimingController, its opening-time is the dose time), the capillary-flow / high-throughput / HTFly sample stages (LinearStage), the sample-delivery pump (loose FlowController), the QuadEM flux monitor (FluxMonitor), and the Sydor beam-position monitor (loose BeamPositionMonitor). There is no monochromator in the footprinting path (white / pink beam; the only DCM is a separate XAS endstation, out of scope). CORA-lens decisions: the dose-delivery chain (shutters + delay-generator timer + filter wheel + flux monitors) is modelled as devices CORA drives; the fraction collector, the pure-Python 96-well plate addressing (no robot, no PV), and the offline mass spec are the sample-custody and offline-readout seam, not devices. The sample-delivery pump REUSES the existing loose FlowController family (i22 + 7-BM + LIX), making XFP its FOURTH consumer, past the rule-of-three LIX fired; the FlowController graduation stays a separate gated PR. New pending Method x_ray_footprinting, the fleet's first dose-delivery Method. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reconcile the nsls2 beamlines list + practices, docs index table, and mkdocs nav keep-both with the parallel-merged AMX (17-ID-1) deployment.
xmap
added a commit
that referenced
this pull request
Jun 26, 2026
… actuator; n=4 rule-of-three i22/7-BM/LIX/XFP) (#400) FlowController was a loose family held as a graduation candidate: LIX (#388) fired the rule-of-three at n=3 and XFP (#395) became the 4th consumer and flagged it "overdue", both deferring the graduation as a separate gated decision. This is that decision (the EmissionSpectrometer #376 precedent). Adds FlowController to catalog/catalog.yaml as a Family: a continuous-setpoint flow / pump actuator presenting the Regulator Role, the settable-actuator sibling of TemperatureController (distinct by what it actuates: mass flow / pump rate, not temperature). One Family spans mass-flow controllers and syringe / peristaltic / HPLC pumps (pump-vs-MFC a per-Asset setting). Removed from _ALLOWED_LOOSE_FAMILIES and _PROMOTION_REVIEWED. Updated the TemperatureController note (its sibling graduated alongside). Swept the four consumer deployments (i22, 7-BM, LIX, XFP) descriptors + docs from loose/overdue to graduated, and fixed two stale cross-references (ISS, i10) that named FlowController as loose. The wider fluidic chain beyond the pump (selector valves, SEC columns, flow cells, fraction collectors) stays in the ControlPort seam pending its own rule-of-three (FLUID-1); FLOW-1's command-vs-read residual is kept. No new beamline (XFP itself already landed via #395); this is the focused graduation delta. 403 deployment guard tests pass; strict docs build clean; ruff clean. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Reverse-engineers NSLS-II's XFP beamline (17-BM, X-ray Footprinting of Biological Materials, a Case Western Reserve University partner beamline) from the public bluesky profile collection (NSLS2/xfp-profile-collection). XFP does synchrotron X-ray footprinting: an intense white / pink beam generates hydroxyl radicals that footprint a protein or nucleic acid in solution; the structural readout is done offline by mass spectrometry.
Why XFP
It is the fleet's first dose-delivery beamline and the most structurally distinct deployment yet. Every other beamline CORA models is a measurement beamline (condition a beam, place a sample, record a detector signal). XFP has no scattering, area, or imaging detector at all. The experiment variable is the delivered radiolytic dose (exposure time x flux x attenuation); the run produces a footprinted sample plus a dose record, and the structural analysis is the offline-readout seam (mass spec, downstream and off the instrument). The novelty lands on the Method, the Subject, and the seam, not on device vocabulary.
What is modelled
14 devices, all real verified PVs, every value
confirm, zero new families: the storage ring (loose StorageRing), the bendable white-beam front-end mirror (Mirror), the white-beam + ADC defining slits (Slit), the 8-position Al filter wheel that sets the dose rate (Filter), the personnel + timed dose shutters (Shutter), the DG535 delay generator that fires the millisecond Uniblitz fast shutter (TimingController, its opening-time is the dose time), the capillary-flow / high-throughput / HTFly sample stages (LinearStage), the sample-delivery pump (loose FlowController), the QuadEM flux monitor (FluxMonitor), and the Sydor beam-position monitor (loose BeamPositionMonitor). There is no monochromator in the footprinting path (white / pink beam; the only DCM is a separate XAS endstation, out of scope).CORA-lens decisions
FlowControllerfamily (i22 + 7-BM + LIX), making XFP its fourth consumer, past the rule-of-three LIX fired; the FlowController graduation stays a separate gated PR.x_ray_footprinting, the fleet's first dose-delivery Method.Verification
ADBaseas a QuadEM base class). 5 prose-fidelity nits applied (DG535 opening-time wording, PHD2000 pump role, custody-as-Procedure precedent).tests/unit/deployments: 403 passed (XFP auto-enrolled;x_ray_footprintingregistered in_PENDING_METHODS; FlowController n=4 in_PROMOTION_REVIEWED).make docs-build --strict: clean.🤖 Generated with Claude Code